

package ubo.master1.jeupoker.ia;

/**
 * Valeur d'une main particulière .
 * 
  */
public class ValeurMain implements Comparable<ValeurMain> {
    
    /** La main. */
    private final UneMain hand;
    
    /** Le type des combinaisons des carte d'une mains. */
    private final CombinaisonCarte type;
    
    /** Valeur numérique d'une main */
    private final int value;
    
    /**
     * Constructeur.
     * 
     * @param hand
     *            La main.
     */
    public ValeurMain(UneMain hand) {
	this.hand = hand;
	EvaluerUneMain evaluator = new EvaluerUneMain(hand);
	type = evaluator.getType();
	value = evaluator.getValue();
    }
    
    /**
     * Retourner la main.
     * 
     * @return La main.
     */
    public UneMain getHand() {
	return hand;
    }
    
    /**
     * Retourner le type de la main.
     * 
     * @return Le type de la main.
     */
    public CombinaisonCarte getType() {
	return type;
    }
    
    /**
     * Retourne le descriptif du type de la main.
     * 
     * @return Le descriptif du type de la main.
     */
    public String getDescription() {
	return type.getDescription();
    }
    
    /**
     * Retourner la valeur de la main.
     * 
     * @return la valeur numérique de la main.
     */
    public int getValue() {
	return value;
    }
    
    /*
     * (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
	return value;
    }
    
    /*
     * (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
	if (obj instanceof ValeurMain) {
	    return ((ValeurMain) obj).getValue() == value;
	} else {
	    return false;
	}
    }
    
    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
	return String.format("%s (%d)", type.getDescription(), value);
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Comparable#compareTo(java.lang.Object)
     */
    @Override
    public int compareTo(ValeurMain handValue) {
	if (value > handValue.getValue()) {
	    return -1;
	} else if (value < handValue.getValue()) {
	    return 1;
	} else {
	    return 0;
	}
    }

}
